package main

import "fmt"

/*
指针作为参数:
	参数的传递: 值传递(传递的是元素)\引用传递(传内存地址)
*/
func fun1(num int) { //值传递(数组\基本数据类型--int\float等)
	fmt.Println("fun1函数中num的值", num)
	num = 100
	fmt.Println("fun1函数中修改num的值", num)
}
func fun2(p1 *int) { //引用传递(指针\切片\map等)
	fmt.Println("fun2函数中p1的值", *p1)
	*p1 = 200
	fmt.Println("fun2函数中修改p1的值", *p1)
}
func fun3(array [4]int) { //值传递(数组)
	fmt.Println("fun3函数中数组的值为:", array)
	array[0] = 100
	fmt.Println("fun3函数中修改后的数组的值为:", array)
}
func fun4(slice []int) { //引用传递(切片)
	fmt.Println("fun4函数中切片的值为:", slice)
	slice[0] = 1000
	fmt.Println("fun4函数中修改后的切片的值为:", slice)
}
func fun5(map1 map[string]int) { //引用传递(map)
	fmt.Println("fun5函数中map的值为:", map1)
	map1["str"] = 1000
	fmt.Println("fun5函数中修改后的map的值为:", map1)
}
func main() {
	a := 10
	fmt.Println("fun1()函数调用前,a:", a)

	fun1(a)
	fmt.Println("fun1函数调用后,a:", a)

	fun2(&a)
	fmt.Println("fun2函数调用后,a:", a)

	array1 := [4]int{1, 3, 4, 6}
	fmt.Println("array1数组在调用前为:", array1)
	fun3(array1)
	fmt.Println("fun3()函数调用后为:", array1)

	slice1 := []int{8, 6, 4, 3}
	fmt.Println("slice1切片在调用前为:", slice1)
	fun4(slice1)
	fmt.Println("fun4()函数调用后为:", slice1)

	map2 := make(map[string]int)
	map2["str"] = 1
	map2["int"] = 2
	map2["linux"] = 3
	fmt.Println("map2在调用前为:", map2)
	fun5(map2)
	fmt.Println("fun5()函数调用后为:", map2)
}
